using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._GeoAnalyticsServerTools._SummarizeData
{
    /// <summary>
    /// <para>Describe Dataset</para>
    /// <para>Summarizes features into calculated field statistics,  sample features, and extent boundaries.</para>
    /// <para>将要素汇总为计算字段统计数据、样本要素和范围边界。</para>
    /// </summary>    
    [DisplayName("Describe Dataset")]
    public class DescribeDataset : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public DescribeDataset()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_input_layer">
        /// <para>Input Layer</para>
        /// <para>The point, line, polygon, or tabular features to be described.</para>
        /// <para>要描述的点、线、面或表格要素。</para>
        /// </param>
        /// <param name="_output_name">
        /// <para>Output Name</para>
        /// <para>The name of the output feature service.</para>
        /// <para>输出要素服务的名称。</para>
        /// </param>
        public DescribeDataset(object _input_layer, object _output_name)
        {
            this._input_layer = _input_layer;
            this._output_name = _output_name;
        }
        public override string ToolboxName => "GeoAnalytics Server Tools";

        public override string ToolName => "Describe Dataset";

        public override string CallName => "geoanalytics.DescribeDataset";

        public override List<string> AcceptEnvironments => ["extent", "outputCoordinateSystem", "workspace"];

        public override object[] ParameterInfo => [_input_layer, _output_name, _sample_features, _create_extent_layer.GetGPValue(), _data_store.GetGPValue(), _output, _extent_layer, _sample_layer, _output_json];

        /// <summary>
        /// <para>Input Layer</para>
        /// <para>The point, line, polygon, or tabular features to be described.</para>
        /// <para>要描述的点、线、面或表格要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _input_layer { get; set; }


        /// <summary>
        /// <para>Output Name</para>
        /// <para>The name of the output feature service.</para>
        /// <para>输出要素服务的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _output_name { get; set; }


        /// <summary>
        /// <para>Number of Sample Features</para>
        /// <para>The number of features that will be included in the output sample layer. No sample is returned if you select 0 features or don't provide a number. By default, no sample layer is returned.</para>
        /// <para>将包含在输出采样图层中的要素数。如果选择 0 个要素或未提供编号，则不会返回任何样本。默认情况下，不返回任何采样图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Number of Sample Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _sample_features { get; set; } = null;


        /// <summary>
        /// <para>Create Extent Layer</para>
        /// <para><xdoc>
        ///   <para>Specifies whether an output extent layer will be created. The extent is a polygon that represents the spatial and temporal extent of the input features.</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>Checked—An extent layer will be created.</bullet_item><para/>
        ///       <bullet_item>Unchecked—An extent layer will not be created.</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否创建输出范围图层。范围是表示输入要素的空间和时间范围的面。</para>
        ///   <para>
        ///     <bulletList>
        ///       <bullet_item>选中 - 将创建范围图层。</bullet_item><para/>
        ///       <bullet_item>未选中 - 将不创建范围图层。</bullet_item><para/>
        ///     </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Create Extent Layer")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _create_extent_layer_value? _create_extent_layer { get; set; } = null;

        public enum _create_extent_layer_value
        {
            /// <summary>
            /// <para>CREATE_EXTENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CREATE_EXTENT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_EXTENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_EXTENT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Data Store</para>
        /// <para><xdoc>
        ///   <para>Specifies the ArcGIS Data Store where the output will be saved. The default is Spatiotemporal big data store. All results stored in a spatiotemporal big data store will be stored in WGS84. Results stored in a relational data store will maintain their coordinate system.</para>
        ///   <bulletList>
        ///     <bullet_item>Spatiotemporal big data store—Output will be stored in a spatiotemporal big data store. This is the default.</bullet_item><para/>
        ///     <bullet_item>Relational data store—Output will be stored in a relational data store.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将保存输出的 ArcGIS Data Store。默认值为 Spatiotemporal 大数据存储。存储在时空大数据存储中的所有结果都将存储在 WGS84 中。存储在关系数据存储中的结果将保留其坐标系。</para>
        ///   <bulletList>
        ///     <bullet_item>时空大数据存储 - 输出将存储在时空大数据存储中。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>关系数据存储 - 输出将存储在关系数据存储中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Store")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _data_store_value _data_store { get; set; } = _data_store_value._SPATIOTEMPORAL_DATA_STORE;

        public enum _data_store_value
        {
            /// <summary>
            /// <para>Spatiotemporal big data store</para>
            /// <para>Spatiotemporal big data store—Output will be stored in a spatiotemporal big data store. This is the default.</para>
            /// <para>时空大数据存储 - 输出将存储在时空大数据存储中。这是默认设置。</para>
            /// </summary>
            [Description("Spatiotemporal big data store")]
            [GPEnumValue("SPATIOTEMPORAL_DATA_STORE")]
            _SPATIOTEMPORAL_DATA_STORE,

            /// <summary>
            /// <para>Relational data store</para>
            /// <para>Relational data store—Output will be stored in a relational data store.</para>
            /// <para>关系数据存储 - 输出将存储在关系数据存储中。</para>
            /// </summary>
            [Description("Relational data store")]
            [GPEnumValue("RELATIONAL_DATA_STORE")]
            _RELATIONAL_DATA_STORE,

        }

        /// <summary>
        /// <para>Output</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output { get; set; }


        /// <summary>
        /// <para>Extent Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Extent Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _extent_layer { get; set; }


        /// <summary>
        /// <para>Sample Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Sample Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _sample_layer { get; set; }


        /// <summary>
        /// <para>Output JSON</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output JSON")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _output_json { get; set; }


        public DescribeDataset SetEnv(object extent = null, object outputCoordinateSystem = null, object workspace = null)
        {
            base.SetEnv(extent: extent, outputCoordinateSystem: outputCoordinateSystem, workspace: workspace);
            return this;
        }

    }

}